package com.treetao.union.db.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.treetao.union.db.Const.OrderStatus;
import com.treetao.union.db.model.MallOrder;
import com.treetao.union.db.model.MallOrderDetail;
/**
 * <p>
 * 订单主表 服务类
 * </p>
 *
 * @author Dev.M
 * @since 2020-04-11
 */
public interface MallOrderService extends IService<MallOrder> {
	/**
	 * 微信支付已回调
	 * @param orderno
	 * @param yuan 订单金额（元）
	 * @param xml 微信通知原生xml
	 * @return
	 */
	boolean payNotifyedWeixin(Long orderno,Double yuan,String xml);
	
	/**
	 * 修改订单状态
	 * @param orderno
	 * @param status
	 * @param opRecordContent 订单操作记录
	 * @return
	 */
	boolean changeOrderStatus(Long orderno,OrderStatus status,String opRecordContent);
	
	/**
	 * 创建订单
	 * @param order
	 * @param details
	 * @param record
	 * @return
	 */
	boolean createOrder(MallOrder order,List<MallOrderDetail> details);
	
	/**
	 * 获取当前订单主表数据
	 * @param orderno
	 * @return
	 */
	MallOrder getMallOrder(Long orderno);

	/**
	 * 获取订单详情
	 * @param orderno
	 * @param refExpress 是否关联收货信息
	 * @return
	 */
	MallOrder getMallOrderDetail(Long orderno,Boolean refExpress);

	/**
	 * 获取订单列表，含详情
	 * @param userId
	 * @param curpage
	 * @param size
	 * @param type 查询类型 @see com.treetao.union.db.OrderQueryType 
	 * @return
	 */
	List<MallOrder> getMallOrderList(Long userId,Long curpage, Long size, String type);

	/**
	 * 订单发货
	 * @param orderno
	 * @param companyNo 物流公司名称
	 * @param expressNo 物流单号
	 * @return
	 */
	boolean send(Long orderno, String companyNo, String expressNo);

	/**
	 * 获取发货后N天后的用户未确认收货的订单
	 * @param day
	 * @return
	 */
	List<MallOrder> getOrderListAtferSend(int day);

	/**
	 * 获取下单后N小时未支付的订单
	 * @param hour
	 * @return
	 */
	List<MallOrder> getOrderListAtferCreate(int hour);
	
	/**
	 * 今日订单数
	 * @return
	 */
	public int getTodayOrderNum();
	/**
	 * 本月订单数
	 * @return
	 */
	public int getMonthOrderNum();
	/**
	 * 今日销售额
	 * @return
	 */
	public double getTodayMoney();
	/**
	 * 本月销售额
	 * @return
	 */
	public double getMonthMoney();
	/**
	 * 月度销售额
	 * @return
	 */
	public double getMonthMoney(String monthStr);
	
	/**
	 * 日销售额
	 * @return
	 */
	public double getDayMoney(String dayStr);
}
